package gui.dialogs;

import gui.DBConnect;
import gui.IntStr;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;

public class foglalasPanel {
	
	class Szek{
		int szam;
		boolean foglalt;
		boolean foglalando;
		JButton gomb;
		
		public Szek(int szam, boolean foglalt){
			this.szam = szam;
			this.foglalt = foglalt;
			this.foglalando=false;
			this.gomb = new JButton(Integer.toString(szam%100));
			if(foglalt){
				this.gomb.setForeground(Color.RED);
				this.gomb.setBackground(Color.RED);
				this.gomb.setEnabled(false);
			}
			else{
				this.gomb.setForeground(Color.GREEN);
				this.gomb.setBackground(Color.GREEN);
				this.gomb.addActionListener(new ActionListener(){

					@Override
					public void actionPerformed(ActionEvent arg0) {
						
						// TODO Auto-generated method stub
						if(!foglalando){
							gui.dialogs.foglalasPanel.csokkent();
							setColor(Color.BLUE);
							foglalando=true;
						}
						else{
							gui.dialogs.foglalasPanel.novel();
							setColor(Color.GREEN);
							foglalando=false;
						}
					}
					
				});
			}

		}
		public void setColor(Color c){
			this.gomb.setForeground(c);
			this.gomb.setBackground(c);
		}
		public JButton getButton(){
			return this.gomb;
		}
		public int getSzam(){
			return this.szam;
		}
		public boolean getFoglalando(){
			return this.foglalando;
		}
		public void tilt(){
			this.gomb.setEnabled(false);
		}
		public void engedelyez(){
				if(foglalando){
					setColor(Color.GREEN);
					this.foglalando=false;
				}
				this.gomb.setEnabled(!foglalt);
				
			
		}
	}
	
	
	
	private JDialog ablak;
	private JPanel p,jegyszam, gombok[], elkuld;
	private static Szek [][]szekek ;
	private JSpinner foglalando;
	private JLabel l_foglalando, error;
	private JButton b_foglalando;
	private JButton ablak_ok;
	private static int foglalasszam;
	
	
	public foglalasPanel(int musor, JFrame mother){
	
		ablak = new JDialog( mother);
		p = new JPanel();
		jegyszam = new JPanel();
		DBConnect dbc = new DBConnect();
		l_foglalando = new JLabel("Jegyek száma:");
		foglalando = new JSpinner();
		foglalando.setModel(new SpinnerNumberModel(1,1,dbc.getHanyJegyOsszesen(),1));
		b_foglalando = new JButton("Ok");
		jegyszam.add(l_foglalando);
		jegyszam.add(foglalando);
		jegyszam.add(b_foglalando);
		int sorszam = dbc.getSorszam(musor);
		szekek = new Szek[sorszam][];
		Vector<Integer> szekszamok=dbc.getSorSzekszam(musor);
		gombok = new JPanel[sorszam];
		elkuld = new JPanel();
		p.setLayout(new GridLayout(sorszam+2,1));
		p.add(jegyszam);
		for(int sor=0;sor<sorszam;sor++){
			gombok[sor]=new JPanel();
			szekek[sor]= new Szek[(Integer) szekszamok.get(sor)];
		}
		for(int i=0;i<sorszam;i++){
			Vector<IntStr> v = dbc.getFerohelyek(musor, i+1);
			
			for(int j=0;j<szekszamok.get(i);j++){
				szekek[i][j]= new Szek(v.get(j).getId(),Boolean.parseBoolean(v.get(j).getAdat()));
				szekek[i][j].tilt();
				gombok[i].add(szekek[i][j].getButton());
			}
			p.add(gombok[i]);
		}
		b_foglalando.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				foglalasszam=(Integer) foglalando.getValue();
				engedelyez();
			}
			
		});
		ablak_ok = new JButton("OK");
		ablak_ok.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				Vector<Integer> v =foglaltHelyek();
				if(v.size()!=(Integer)foglalando.getValue()){
					error= new JLabel("Nem megfelelő székszám!");
					try{
						elkuld.remove(error);
					}catch (NullPointerException npe){
						
					}
					elkuld.add(error);
					elkuld.updateUI();
				}
				else{
					
					try{
						elkuld.remove(error);
					}catch (NullPointerException npe){
						
					}
					error = new JLabel("");
					gui.main.Jegyek.setFoglalando(v);
					gui.main.Jegyek.enableKedvezmenyek();
					closeDialog();
				}
			}
		});
		
		elkuld.add(ablak_ok);
		p.add(elkuld);
		ablak.add(p);
		
		ablak.setSize(getLeghosszabbSor()*50,szekek.length*40+80);
		ablak.setVisible(true);	
	}

	
	public Vector<Integer> foglaltHelyek(){
		Vector<Integer> v = new Vector<Integer>();

		for(int i=0; i<szekek.length;i++){
			for(int j=0;j<szekek[i].length;j++){
				if(szekek[i][j].getFoglalando()){
					v.add(szekek[i][j].getSzam());
				}
			}
		}
		return v;
	}
	public void closeDialog(){
		ablak.setVisible(false);
		ablak.dispose();
	}
	
	public int getLeghosszabbSor(){
		int max =0;
		for(int i=0;i<szekek.length;i++){
			if(szekek[i].length>max){
				max=szekek[i].length;
			}
		}
		return max;
	}
	public static void engedelyez(){
		for(int i=0;i<szekek.length;i++){
			for(int j=0;j<szekek[i].length;j++){
				szekek[i][j].engedelyez();
			}
		}
	}
	public static void letilt(){
		for(int i=0;i<szekek.length;i++){
			for(int j=0;j<szekek[i].length;j++){
				szekek[i][j].tilt();
			}
		}
	}	
	public static void csokkent(){
		foglalasszam--;
		if(foglalasszam==0){
			letilt();
		}
	}
	public static void novel(){
		foglalasszam--;
		if(foglalasszam!=0){
			engedelyez();
		}
	}
}
